package cn.com.reflect;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.rmi.server.ExportException;
import java.util.Properties;

/*
* 框架类
* */
public class ReflectTest {
    public static void main(String[] args) throws Exception {
        /*
         * 框架类，可以执行任意类的对象，可以执行任意方法
         * */
        //1. 加载配置文件
        //1.1 创建Properties对象
        Properties pro = new Properties();
        //1.2 加载配置文件，转为一个集合
        //1.2.1 获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader(); //字节码文件的类加载器
        InputStream is = classLoader.getResourceAsStream("pro.properties"); //获取资源对应的字节流
        pro.load(is);

        //2. 获取配置文件中定义的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //3. 加载该类进内存
        Class cls = Class.forName(className);
        //4. 创建该类对象
        Object obj = cls.newInstance();
        //5. 获取方法对象
        Method method = cls.getMethod(methodName);
        //6. 执行方法
        method.invoke(obj); //sleep
    }
}
